# 一、引入依赖
slethu是分布式链路追踪,可以实现traceId自动添加,通过traceId定位链路
zipkin是可视化工具,traceId可以追踪链路,但是只能通过日志查看,通过zipkin可以分析整个链路经过哪些服务,并且花了多少时间,通过时间分析可以得知哪里是性能瓶颈;同时zipkin还可以分析依赖关系,查看哪条链路被调用的频率最高。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<version>3.0.4</version>
</dependency>
// dubbo的增强,sleuth不支持dubbo,引入后才可使用
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-instrumentation-dubbo</artifactId>
<version>5.13.3</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
<version>3.0.4</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 二、SpringCloud配置
将如下配置添加到yml文件中
spring:
cloud:
zipkin:
base-url: http://127.0.0.1:9411
dubbo:
provider:
filter: tracing
consumer:
filter: tracing
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 三、Zipkin Server下载
下载后运行
java -jar xxxx.jar即可启动ziplkin


# 四、疑难杂症
# 问题
- 整合Seths以及Zipkin后,在调用redistemplate的时候,报了以下问题
java.lang.NoSuchFieldError: LIFTER
at org.springframework.cloud.sleuth.instrument.reactor.ReactorHooksHelper.getLifterName(ReactorHooksHelper.java:170) ~[spring-cloud-sleuth-instrumentation-3.0.4.jar!/:3.0.4]
at org.springframework.cloud.sleuth.instrument.reactor.ReactorHooksHelper.isTraceContextPropagator(ReactorHooksHelper.java:174) ~[spring-cloud-sleuth-instrumentation-3.0.4.jar!/:3.0.4]
at org.springframework.cloud.sleuth.instrument.reactor.ReactorHooksHelper.shouldDecorate(ReactorHooksHelper.java:120) ~[spring-cloud-sleuth-instrumentation-3.0.4.jar!/:3.0.4]
at reactor.core.publisher.Operators$LiftFunction.apply(Operators.java:2486) ~[reactor-core-3.3.8.RELEASE.jar!/:3.3.8.RELEASE]
at reactor.core.publisher.Operators$LiftFunction.apply(Operators.java:2447) ~[reactor-core-3.3.8.RELEASE.jar!/:3.3.8.RELEASE]
at reactor.core.publisher.Mono.onAssembly(Mono.java:4839) ~[reactor-core-3.3.8.RELEASE.jar!/:3.3.8.RELEASE]
1
2
3
4
5
6
7
2
3
4
5
6
7
解决:版本不兼容问题,修改Reactor为以下版本即解决
- 如果更新后没有效果,注意看报错的具体是哪个项目的,需要更新的是该项目下的版本
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
<version>3.4.16</version>
</dependency>
1
2
3
4
5
2
3
4
5
# 总结
- 使用搜索引擎的时候,可以将时间调为最近一年的博客,因为技术迭代很快的,如果是两三年前的东西,很多都跟不上最新的迭代。
- 分析问题的时候,从抛出的异常分析,先看问题从哪里跑出来的,然后看抛出的是什么问题,再分析和查找可能的原因。